package com.lap.framework.generator.configure.model;

import java.util.List;
import java.util.Set;
import lombok.*;
import org.apache.commons.lang3.StringUtils;

/**
 * 数据库连接配置
 *
 * @author Shuisheng Lao(劳水生)
 * @version 1.0.0
 */
@Data
public class Jdbc {

  /** 连接串 */
  private String url;

  /** 帐号 */
  private String username;

  /** 密码 */
  private String password;

  /** 表单配置 */
  private TableConfig table;

  @Data
  public static class TableConfig {

    /** 如果是多表配置，这里配置 */
    private List<String> includes;

    /** 如果是所有，这里配置，值:all或者* */
    private String all;

    /** 忽略配置 */
    private Ignore ignore;

    /** 生成实体类排除属性 */
    private Set<String> excludeField;

    /** 插入mapper排除字段 */
    private Set<String> ignoreInsert;

    /** 更新mapper排除字段 */
    private Set<String> ignoreUpdate;

    private Set<String> ignoreCommand;

    @Data
    public static class Ignore {

      /** 忽略前缀，如:prefix=sys sys_user->user */
      private String prefix;

      /** 忽略后缀，解释同上 */
      private String suffix;

      /**
       * 判断都为空或者有刚好相等
       *
       * @param tableName 其他只
       * @return 是否
       */
      public boolean isAllNullOrEqAny(String tableName) {
        if (StringUtils.isAllBlank(prefix, suffix)) return true;
        return prefix.equals(tableName) || suffix.equals(tableName);
      }
    }

    /**
     * 截取表配置的忽略前后缀
     *
     * @param tableName 表名
     * @return 有效名字
     */
    public String resolveName(String tableName) {
      if (ignore.isAllNullOrEqAny(tableName)) {
        return tableName;
      }
      if (StringUtils.isNotBlank(ignore.prefix)) {
        return tableName.substring(ignore.prefix.length());
      }
      if (StringUtils.isNotBlank(ignore.suffix)) {
        return tableName.substring(0, ignore.suffix.length());
      }
      return tableName;
    }
  }
}
